package sql;

import extras.Producto;
import util.ConexionJDBC;

import javax.swing.*;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class SqlProducto {

    public void altaProducto(Producto producto, int cantidad) {
        String mensaje = "";
        boolean fallo = false;
        ConexionJDBC conn = new ConexionJDBC();
        Connection connection = conn.getConnection();
        try {
            PreparedStatement prep = connection.prepareStatement(
                "INSERT INTO productos VALUES (?,?,?,?,?,?,?,?);");
            if (prep !=null) {
                try {
                    prep.setInt(2, producto.getCodigo());
                    prep.setString(3, producto.getNombre());
                    prep.setString(4, producto.getMarca());
                    prep.setString(5, producto.getColor());
                    prep.setInt(6, producto.getTalle());
                    prep.setFloat(7, producto.getPrecio());
                    prep.setInt(8,cantidad);
                    prep.addBatch();
                    conn.setAutoCommit(false);
                    prep.executeBatch();
                    conn.setAutoCommit(true);
                } catch (SQLException e) {
                    mensaje = e.getMessage();
                    fallo = true;
                }
            }
            if (conn != null)
                try {
                    conn.close();
                } catch (Exception e) {
                    mensaje = e.getMessage();
                    fallo = true;
                }
        } catch (SQLException e) {
            mensaje = e.getMessage();
            fallo = true;
        } finally {
            if (!fallo) {
                JOptionPane.showMessageDialog(new JFrame(),
                        "El producto se ha guardado correctamente.", "�xito",
                        JOptionPane.INFORMATION_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(new JFrame(),
                        "No se ha podido completar la operaci�n.\n" + mensaje,
                        "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    public void eliminarProducto(int codigo, String color, int talle) {
        String mensaje = "";
        boolean fallo = false;
        try {
            ConexionJDBC conn = new ConexionJDBC();
            Connection connection = conn.getConnection();
            Statement stmt;
            String sqlBuscarId = "SELECT id FROM productos WHERE codigo=" + codigo + 
            		" AND color=" + color + " AND talle=" + talle + ";";
            stmt = connection.createStatement();
            ResultSet rs = stmt.executeQuery(sqlBuscarId);
            int id = rs.getInt("id");
            rs.close();
            String sqlBorrar = "DELETE FROM productos WHERE id=" + id + ";";
            stmt.execute(sqlBorrar);
            if (stmt != null)
                try {
                    stmt.close();
                } catch (Exception e) {
                    mensaje = e.getMessage();
                    fallo = true;
                    System.out.println("Error en statement");
                }
            if (conn != null)
                try {
                    conn.close();
                } catch (Exception e) {
                    mensaje = e.getMessage();
                    fallo = true;
                    System.out.println("Error en conexion");
                }
        } catch (Exception e) {
            mensaje = e.getMessage();
            fallo = true;
            System.out.println("Error");
        } finally {
            if (!fallo) {
                JOptionPane.showMessageDialog(new JFrame(),
                        "El producto se ha eliminado correctamente.", "�xito",
                        JOptionPane.INFORMATION_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(new JFrame(),
                        "No se ha podido completar la operaci�n.\n" + mensaje,
                        "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    }
    
    public List<Producto> consultarProducto(int codigo) {
        String mensaje = "";
        boolean fallo = false;
        List<Producto> productosEncontrados = new ArrayList<Producto>();
        List<Integer> cantidades = new ArrayList<Integer>();
        try {
            ConexionJDBC conn = new ConexionJDBC();
            Connection connection = conn.getConnection();
            Statement stmt;
            String sql = "SELECT codigo,nombre,marca,color,talle,precio,cantidad "
            		+ "FROM productos WHERE codigo=" + codigo + 
            		" ORDER BY color,talle" + ";";
            stmt = connection.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
            	Producto producto = new Producto(rs.getInt("codigo"),rs.getString("nombre"),
            			rs.getString("color"),rs.getString("marca"),rs.getInt("talle"),
            			rs.getFloat("precio"));
            	productosEncontrados.add(producto);
            	cantidades.add(rs.getInt("cantidad"));
            }
            rs.close();
            if (stmt != null)
                try {
                    stmt.close();
                } catch (Exception e) {
                    mensaje = e.getMessage();
                    fallo = true;
                }
            if (conn != null)
                try {
                    conn.close();
                } catch (Exception e) {
                    mensaje = e.getMessage();
                    fallo = true;
                }
        } catch (Exception e) {
            mensaje = e.getMessage();
            fallo = true;
        } finally {
            if (fallo) {
                JOptionPane.showMessageDialog(new JFrame(),
                        "No se ha podido completar la operaci�n.\n" + mensaje,
                        "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
        return productosEncontrados;
    }

    
    public static void main(String [] arg) {
    	
    	SqlProducto sqlProducto = new SqlProducto();
        //Producto producto = new Producto(2,"remera","azul","buala",2,(float) 150);
        //Producto otroProducto = new Producto(2,"remera","blanco","buala",2,(float) 150);
        //sqlProducto.altaProducto(producto,4);
        //sqlProducto.altaProducto(otroProducto,5);
        sqlProducto.eliminarProducto(2,"blanco",1);
    	/*List<Producto> productos = new ArrayList<Producto>();
    	productos = sqlProducto.consultarProducto(2);
    	Iterator iprod = productos.iterator();
    	while (iprod.hasNext()) {
    		Producto prod = (Producto)iprod.next();
    		System.out.println(prod.getCodigo() + " " + prod.getNombre() + " " + prod.getMarca() + " " 
    		+ prod.getColor() + " " + prod.getTalle() + " " + prod.getPrecio());
    	}*/
        
    }
}